package com.java8.java8.stream;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stream {
    public static void main(String[] args) {

        List<Apple> appleList = new ArrayList<>();//存放apple对象集合

        Apple apple1 =  new Apple(1,"苹果1",new BigDecimal("3.25"),10);
        Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);
        Apple apple2 =  new Apple(2,"香蕉",new BigDecimal("2.89"),30);
        Apple apple3 =  new Apple(3,"荔枝",new BigDecimal("9.99"),40);

        appleList.add(apple1);
        appleList.add(apple12);
        appleList.add(apple2);
        appleList.add(apple3);

        // 一 分组
        Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
        System.out.println(groupBy);

        // 二 List转Map
        /**
         * /**
         *  * List -> Map
         *  * 需要注意的是：
         *  * toMap 如果集合对象有重复的key，会报错Duplicate key ....
         *  *  apple1,apple12的id都为1。
         *  *  可以用 (k1,k2)->k1 来设置，如果有重复的key,则保留key1,舍弃key2
         *  */
        Map<Integer,Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId,
                a -> a,(k1,k2)->k1)
        );
        System.out.println(appleMap);


        // 三 过滤Filter
        // 从集合中过滤出来符合条件的元素：
        List<Apple> filterList = appleList.stream().filter(a-> a.getName().equals("香蕉")).collect(Collectors.toList());
        System.out.println(filterList.toString());

        // 四 求和
        BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
        System.out.println(totalMoney);

        //五 去掉重复元素的个数
        System.out.println(appleList.stream().distinct().count());


        // 带逗号String转list
        //1.转Integer类型list
        //String IntegerType="1,2,3";
        //List<Integer> IntegerResult = Arrays.asList(StringType.split(",")).stream().map(s ->Integer.parseInt(s.trim())).collect(Collectors.toList());

        //2.转String类型的list
        //String StringType="a,b,c";
        //List<String> StringResult = Arrays.asList(StringType.split(",")).stream().map(s ->s.trim()).collect(Collectors.toList());
    }
}
